Quickstart KMP (Android)
Instruções para adicionar o Group Link SDK ao lado Android do seu aplicativo Kotlin Multiplatform (KMP).
Passo 1 - Adicionando permissões ao Manifest
Adicione as seguintes permissões no AndroidManifest.xml.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
...
</manifest>
Passo 2 - Instalando a biblioteca Group Link
- No arquivo
settings.gradle.kts, adicione a URL doJitpackdentro da seçãorepositories:
...
dependencyResolutionManagement {
repositories {
google {
...
}
mavenCentral()
maven { url = uri("https://jitpack.io") } // Package repository for Android libraries.
}
}
...
- No
build.gradle(androidApp)do seu projeto, adicione a biblioteca Group Link incluindo a seguinte implementação:
...
dependencies {
...
implementation("com.grouplinknetwork:lib-grouplinknetwork:4+") // Implementation of the Android library from the Group Link SDK
}
...
Passo 3 - Criando o arquivo JSON com o seu Token Group Link
- Crie um arquivo chamado
grouplink-services.jsondentro do diretório.../androidApp/src/main/assets/.
Nota: Crie o diretório
.../androidApp/src/main/assets/caso ele ainda não exista no seu projeto.
- Insira o conteúdo abaixo no JSON.
Nota: Substitua o
YOUR_GROUP_LINK_TOKENpelo seu token de autenticação (fornecido pela Group Link).
{
"token": "YOUR_GROUP_LINK_TOKEN"
}
Passo 4 - Solicitando permissões em tempo de execução
No seu projeto, localize a sua MainActivity e adicione as permissões seguindo o modelo abaixo.
- Importe a biblioteca Group Link.
- Solicite as permissões em tempo de execução.
// Example of permission request for Android
package com.grouplink.kmp.test.androidApp
import android.Manifest
import android.app.Activity
...
import com.grouplinknetwork.GroupLink // <---- Importing the Group Link library
class MainActivity : ComponentActivity() {
private val REQUEST_PERMISSION_CODE = 420 // Request code for necessary permissions
private val ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE = 0 // Request code for necessary permissions (Android 6)
private var count = 0 // Counter to prevent repeated permission requests
private var countAutoStart = 0 // Counter to prevent repeated auto-start permission requests
// Counter to prevent repeated auto-start permission requests
private val REQUIRED_PERMISSIONS = arrayOf(
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
// Permissions required for operation on Android 10 (Q)
private val REQUIRED_PERMISSIONS_Q = arrayOf(
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
// Logic for operation on Android 12 (S) and 13 (Tiramisu)
private fun getRequiredPermissionsS(): Array<String> {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
arrayOf(
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_ADVERTISE,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.POST_NOTIFICATIONS
)
} else {
arrayOf(
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_ADVERTISE,
Manifest.permission.BLUETOOTH_CONNECT
)
}
}
// The onCreate method is where the Group Link SDK is registered and permissions are requested
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
// Starting the Group Link SDK
GroupLink.register(
this, // Application context
false // Parameter to enable or disable debug mode
)
requestGlPermissions() // Requesting the necessary permissions for the Group Link SDK to function.
...
}
// Method for requesting the necessary permissions
private fun requestGlPermissions() {
// Requesting permissions for Android 12 (S)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
if (!hasNeededPermissionsS()) {
requestPermissionsS()
return
}
}
// Requesting permissions for Android 10 (Q)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
if (!hasNeededPermissionsQ()) {
requestPermissionsQ()
return
}
}
// Requesting permissions up to Android 9 (Pie)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
if (!hasNeededPermissions()) {
requestPermissions()
return
}
}
// Checking if all permissions have already been granted
if (countAutoStart < 1) {
countAutoStart++
}
}
// Method to verify if the necessary permissions have been granted
private fun hasNeededPermissions(): Boolean {
return REQUIRED_PERMISSIONS.all {
ActivityCompat.checkSelfPermission(this, it) == PackageManager.PERMISSION_GRANTED
}
}
// Method to check if the necessary permissions have been granted for Android 10 (Q)
private fun hasNeededPermissionsQ(): Boolean {
return REQUIRED_PERMISSIONS_Q.all {
ActivityCompat.checkSelfPermission(this, it) == PackageManager.PERMISSION_GRANTED
}
}
// Method to check if the necessary permissions have been granted for Android 12 (S)
private fun hasNeededPermissionsS(): Boolean {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
getRequiredPermissionsS().all {
ActivityCompat.checkSelfPermission(this, it) == PackageManager.PERMISSION_GRANTED
}
} else true
}
// Methods for requesting the necessary permissions for the Group Link SDK to function.
private fun requestPermissions() {
ActivityCompat.requestPermissions(this, REQUIRED_PERMISSIONS, REQUEST_PERMISSION_CODE)
}
// Method to request the necessary permissions for Android 10 (Q)
private fun requestPermissionsQ() {
ActivityCompat.requestPermissions(this, REQUIRED_PERMISSIONS_Q, REQUEST_PERMISSION_CODE)
}
// Method for requesting the necessary permissions for Android 12 (S)
private fun requestPermissionsS() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
ActivityCompat.requestPermissions(this, getRequiredPermissionsS(), REQUEST_PERMISSION_CODE)
}
}
// Method for handling the results of permission requests.
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
if (requestCode == REQUEST_PERMISSION_CODE) {
if (count < REQUIRED_PERMISSIONS_Q.size) {
count++
requestGlPermissions()
return
}
if (countAutoStart < 1) {
countAutoStart++
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
}
...
Agora que o Group Link SDK para Android está implementado e os recursos nativos estão configurados, o seu aplicativo KMP está pronto para interagir com o nosso ecossistema!